#pragma once
#define HTTPCONN 1
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/epoll.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#define READ_BUFFER 2048
#define WRITE_BUFFER 2048

// 添加fd用户连接到关心事件中
int ADD_FD(const int &ep_fd, const int &app_fd, bool one_shot);

// 当用户链接关闭或出错时,先在底层epoll删除用户fd
int DELETE_FD(const int &ep_fd, const int &del_fd);

// 修改用户fd事件,同时重置ONESHOT选项,便于后续可读时,EPOLLIN事件触发
int MOD_FD(const int &ep_fd, const int &fd, int ev);

// 设置fd事件为非阻塞
int SET_NOBLOCK_FD(const int &fd);

class httpconn
{
public:
    static int _epoll_fd; // 记录当前用户fd,默认值-1
    static int _conn_num; // 记录当前连接服务器用户总数
public:
    // 初始化函数
    void init(const int &fd, const struct sockaddr_in &conn_addr);
    //读取函数
    void read();
    //写入函数
    void write();
private:
    // 分配的连接客户fd
    int _sock_fd;

    //ipv4套接字结构
    struct sockaddr_in _conn_addr;

    //读缓冲区
    char read_buff[READ_BUFFER];

    //写缓冲区
    char write_buff[WRITE_BUFFER];
};